home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.4)
-
- from impacket.structure import Structure
-
- def zeroize(s):
- return '\x00'.join(str(s)) + '\x00'
-
-
- class SpoolSS_DevModeContainer(Structure):
- alignment = 4
- structure = (('cbBuf', '<L-DevMode'), ('pDevMode', '<L&DevMode'), ('DevMode', ':'))
-
-
- class SpoolSS_OpenPrinter(Structure):
- alignment = 4
- opnum = 1
- structure = (('pPrinterName', '<L&PrinterName'), ('PrinterName', 'w'), ('pDevMode', '<L&DevMode'), ('DevMode', ':', SpoolSS_DevModeContainer), ('AccessRequired', '<L'), ('DataType', 'w'))
-
-
- class SpoolSS_PrinterInfo1(Structure):
- alignment = 4
- structure = (('level', '<L=1'), ('_level', '<L=1'), ('pPrinterInfo1', '<L=0x08081200'), ('flags', '<L'), ('pDescription', '<L&Description'), ('pName', '<L&Name'), ('pComment', '<L&Comment'), ('Description', 'w'), ('Name', 'w'), ('Comment', 'w'))
-
-
- class SpoolSS_PrinterInfo2(Structure):
- alignment = 4
- structure = (('level', '<L=2'), ('_level', '<L=2'), ('pPrinterInfo2', '<L=0x08081200'), ('pServerName', '<L&ServerName'), ('pPrinterName', '<L&PrinterName'), ('pShareName', '<L&ShareName'), ('pPortName', '<L&PortName'), ('pDriverName', '<L&DriverName'), ('pComment', '<L&Comment'), ('pLocation', '<L&Location'), ('pDevMode', '<L&DevMode'), ('pSepFile', '<L&SepFile'), ('pPrintProcessor', '<L&PrintProcessor'), ('pDatatype', '<L&Datatype'), ('pParameters', '<L&Parameters'), ('pSecurityDescriptor', '<L&SecurityDescriptor'), ('Attributes', '<L=0'), ('Priority', '<L=0'), ('DefaultPriority', '<L=0'), ('StartTime', '<L=0'), ('UntilTime', '<L=0'), ('Status', '<L=0'), ('cjobs', '<L=0'), ('AveragePPM', '<L=0'), ('ServerName', 'w'), ('PrinterName', 'w'), ('ShareName', 'w'), ('PortName', 'w'), ('DriverName', 'w'), ('Comment', 'w'), ('Location', 'w'), ('DevMode', ':'), ('SepFile', 'w'), ('PrintProcessor', 'w'), ('Datatype', 'w'), ('Parameters', 'w'), ('SecurityDescriptor', ':'))
-
-
- class SpoolSS_AddPrinter(Structure):
- opnum = 5
- alignment = 4
- structure = (('pName', '<L&Name'), ('Name', 'w'), ('info', ':', SpoolSS_PrinterInfo2), ('blob', ':'))
-
-
- class SpoolSS_DeletePrinter(Structure):
- opnum = 6
- alignment = 4
- structure = (('handle', '<L'),)
-
-
- class SpoolSS_AddPrinterEx(Structure):
- opnum = 70
- alignment = 4
- structure = (('pName', '<L=0x12345678'), ('Name', 'w'), ('info', ':', SpoolSS_PrinterInfo2), ('blob', ':'))
-
-
- class SpoolSS_EnumPrinters(Structure):
- opnum = 0
- alignment = 4
- structure = (('flags', '<L'), ('pName', '<L&Name'), ('Name', 'w'), ('level', '<L'), ('pPrinterEnum', '<L&PrinterEnum'), ('_cbBuf', '<L-PrinterEnum'), ('PrinterEnum', ':'), ('cbBuf', '<L-PrinterEnum'))
-
-
- class SpoolSS_EnumPrinters_answer(Structure):
- alignment = 4
- structure = (('pPrinterEnum', '<L&PrinterEnum'), ('cbPrinterEnum', '<L-PrinterEnum'), ('PrinterEnum', ':'), ('cbNeeded', '<L'), ('cReturned', '<L'))
-
-
- class SpoolSS_EnumPorts(Structure):
- opnum = 35
- alignment = 4
- structure = (('pName', '<L&Name'), ('Name', 'w'), ('level', '<L'), ('pPort', '<L&Port'), ('_cbBuf', '<L-Port'), ('Port', ':'), ('cbBuf', '<L-Port'))
-
-
- class SpoolSS_EnumPorts_answer(Structure):
- alignment = 4
- structure = (('pPort', '<L&Port'), ('cbPort', '<L-Port'), ('Port', ':'), ('cbNeeded', '<L'), ('cReturned', '<L'))
-
-
- class SpoolSS_AddPort(Structure):
- opnum = 37
- alignment = 4
- structure = (('pName', '<L&Name'), ('Name', 'w'), ('hWnd', '<L'), ('pMonitorName', '<L&MonitorName'), ('MonitorName', 'w'))
-
-
- class SpoolSS_PortInfo1(Structure):
- alignment = 4
- structure = (('level', '<L=1'), ('_level', '<L=1'), ('pPortInfo1', '<L=0x08081200'), ('pName', '<L&Name'), ('Name', 'w'))
-
-
- class SpoolSS_AddPortEx(Structure):
- opnum = 61
- alignment = 4
- structure = (('pName', '<L&Name'), ('Name', 'w'), ('Port', ':', SpoolSS_PortInfo1), ('cbMonitorData', '<L-MonitorData'), ('MonitorData', ':'), ('MonitorName', 'w'))
-
-
- class SpoolSS_AddPrintProcessor(Structure):
- opnum = 14
- alignment = 4
- structure = (('pName', '<L&Name'), ('Name', 'w'), ('pEnvironment', '<L&Environment'), ('pPathName', '<L&PathName'), ('pPrintProcessorName', '<L&PrintProcessorName'), ('Environment', 'w'), ('PathName', 'w'), ('PrintProcessorName', 'w'))
-
-
- class SpoolSS_EnumMonitors(Structure):
- opnum = 36
- alignment = 4
- structure = (('pName', '<L&Name'), ('Name', 'w'), ('level', '<L'), ('pMonitor', '<L&Monitor'), ('_cbBuf', '<L-Monitor'), ('Monitor', ':'), ('cbBuf', '<L-Monitor'))
-
-
- class SpoolSS_AddMonitor(Structure):
- opnum = 46
- alignment = 4
- structure = (('pHostName', '<L&HostName'), ('HostName', 'w'), ('level', '<L'), ('level', '<L'), ('pLevel', '<L&level'), ('pName', '<L&Name'), ('pEnvironment', '<L&Environment'), ('pDLLName', '<L&DLLName'), ('Name', 'w'), ('Environment', 'w'), ('DLLName', 'w'))
-
-
- class SpoolSS_EnumMonitors_answer(Structure):
- alignment = 4
- structure = (('pMonitor', '<L&Monitor'), ('cbMonitor', '<L-Monitor'), ('Monitor', ':'), ('cbNeeded', '<L'), ('cReturned', '<L'))
-
- PRINTER_ENUM_DEFAULT = 1
- PRINTER_ENUM_LOCAL = 2
- PRINTER_ENUM_CONNECTIONS = 4
- PRINTER_ENUM_FAVORITE = 4
- PRINTER_ENUM_NAME = 8
- PRINTER_ENUM_REMOTE = 16
- PRINTER_ENUM_SHARED = 32
- PRINTER_ENUM_NETWORK = 64
-
- class PrintSpooler:
-
- def __init__(self, dce):
- self.dce = dce
-
-
- def doRequest(self, request, noAnswer = 0, checkReturn = 1):
- self.dce.call(request.opnum, request)
- if noAnswer:
- return None
- else:
- answer = self.dce.recv()
- if checkReturn and answer[-4:] != '\x00\x00\x00\x00':
- raise Exception, 'DCE-RPC call returned an error.'
-
- return answer
-
-
- def enumPrinters(self, name, flags = 0, level = 1):
- enumPrinters = SpoolSS_EnumPrinters()
- enumPrinters['level'] = level
- enumPrinters['flags'] = flags
- enumPrinters['Name'] = name
- enumPrinters['PrinterEnum'] = ''
- ans = SpoolSS_EnumPrinters_answer(self.doRequest(enumPrinters, checkReturn = 0))
- self.logDebug('enumPrinters() needing %d bytes' % ans['cbNeeded'])
- if ans['cbNeeded'] > 4096:
- raise Exception, 'Buffer is too big.'
-
- enumPrinters = SpoolSS_EnumPrinters()
- enumPrinters['level'] = level
- enumPrinters['flags'] = flags
- enumPrinters['Name'] = name
- enumPrinters['PrinterEnum'] = '\x00' * ans['cbNeeded']
- ans = SpoolSS_EnumPrinters_answer(self.doRequest(enumPrinters, checkReturn = 0))
-
-
- def openPrinter(self, printerName, dataType, devMode, accessRequired):
- openPrinter = SpoolSS_OpenPrinter()
- if printerName:
- openPrinter['PrinterName'] = zeroize(printerName + '\x00')
-
- if dataType:
- openPrinter['DataType'] = zeroize(dataType + '\x00')
-
- if devMode:
- devModeC = SpoolSS_DevModeContainer()
- devModeC['cbBuf'] = 0
- devModeC['pDevMode'] = 0
- devModeC['DevMode'] = ''
- openPrinter['DevMode'] = '\x00\x00\x00\x00'
- openPrinter['pDevMode'] = 0
-
- openPrinter['AccessRequired'] = accessRequired
- return self.doRequest(openPrinter, checkReturn = 0)
-
-
- def enumPorts(self, level = 1, noAnswer = 0):
- enumPorts = SpoolSS_EnumPorts()
- enumPorts['level'] = level
- enumPorts['Port'] = ''
- if noAnswer:
- self.doRequest(enumPorts, noAnswer = 1)
- else:
- ans = SpoolSS_EnumPorts_answer(self.doRequest(enumPorts, checkReturn = 0))
- enumPorts = SpoolSS_EnumPorts()
- enumPorts['level'] = level
- enumPorts['Port'] = '\x00' * ans['cbNeeded']
- ans = SpoolSS_EnumPorts_answer(self.doRequest(enumPorts, checkReturn = 0))
-
-
- def enumMonitors(self, level = 1):
- enumMonitors = SpoolSS_EnumMonitors()
- enumMonitors['level'] = level
- enumMonitors['Monitor'] = ''
- ans = SpoolSS_EnumMonitors_answer(self.doRequest(enumMonitors, checkReturn = 0))
- enumMonitors = SpoolSS_EnumMonitors()
- enumMonitors['level'] = level
- enumMonitors['Monitor'] = '\x00' * ans['cbNeeded']
- ans = SpoolSS_EnumMonitors_answer(self.doRequest(enumMonitors, checkReturn = 0))
-
-
- def addMonitor(self, name, monitorName, environment, dllName):
- addMonitor = SpoolSS_AddMonitor()
- addMonitor['level'] = 2
- addMonitor['HostName'] = zeroize(name)
- addMonitor['Name'] = zeroize(monitorName)
- addMonitor['Environment'] = zeroize(environment)
- addMonitor['DLLName'] = zeroize(dllName)
- ans = self.doRequest(addMonitor, checkReturn = 0)
- print '%r' % ans
-
-
- def addPort(self):
- addPort = SpoolSS_AddPort()
- addPort['Name'] = zeroize('\\192.168.22.90\x00')
- addPort['hWnd'] = 0
- addPort['MonitorName'] = zeroize('LanMan Print Services Port\x00')
- return self.doRequest(addPort)
-
-
- def addPortEx(self):
- port = SpoolSS_PortInfo1()
- port['Name'] = zeroize('Port Name\x00')
- addPortEx = SpoolSS_AddPortEx()
- addPortEx['Name'] = zeroize('\\\\192.168.22.90\x00')
- addPortEx['Port'] = port
- addPortEx['cbMonitorData'] = 0
- addPortEx['MonitorData'] = '\x00' * 4
- addPortEx['MonitorName'] = zeroize('Monitor Name\x00')
- return self.doRequest(addPortEx)
-
-
- def addPrintProcessor(self):
- addPrintProcessor = SpoolSS_AddPrintProcessor()
- addPrintProcessor['Environment'] = zeroize('Windows NT x86\x00')
- addPrintProcessor['PathName'] = zeroize('C:\\hola\\manola\x00')
- addPrintProcessor['PrintProcessorName'] = zeroize('chaucha\x00')
- return self.doRequest(addPrintProcessor)
-
-
- def deletePrinter(self, handle):
- deletePrinter = SpoolSS_DeletePrinter()
- deletePrinter['handle'] = handle
- self.doRequest(deletePrinter)
-
-
- def addPrinter(self, serverName, name, level = 1, flags = 0, comment = None, description = None):
- addPrinter = SpoolSS_AddPrinter()
- if serverName is not None:
- addPrinter['Name'] = serverName
-
- if level == 1:
- addPrinter['info'] = SpoolSS_PrinterInfo1()
- addPrinter['info']['Name'] = name
- addPrinter['info']['Description'] = description
- addPrinter['info']['flags'] = flags
- elif level == 2:
- addPrinter['info'] = SpoolSS_PrinterInfo2()
- addPrinter['info']['PrinterName'] = name
- else:
- raise Exception, 'Unknown PRINTER_INFO level'
- addPrinter['info']['Comment'] = comment
- addPrinter['blob'] = '\x00\x00\x00\x00' * 4
- return self.doRequest(addPrinter, checkReturn = 0)
-
-
- def addPrinterEx(self, serverName, name, comment = None):
- addPrinterEx = SpoolSS_AddPrinterEx()
- addPrinterEx['Name'] = serverName
- addPrinterEx['info'] = SpoolSS_PrinterInfo2()
- addPrinterEx['info']['PrinterName'] = name
- addPrinterEx['info']['Comment'] = comment
- addPrinterEx['blob'] = '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\xf8\xf30\x00\x1c\x00\x00\x00\xf0b\xc9\x00\xe0\xf10\x00\x93\x08\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\\\x00\\\x00E\x00R\x00A\x00T\x00O\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00A\x00d\x00m\x00i\x00n\x00i\x00s\x00t\x00r\x00a\x00t\x00o\x00r\x00\x00\x00'
- return self.doRequest(addPrinterEx)
-
-
-